package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	s1 := "hello"
	s2 := "你好"
	s2 = "你好吗"
	//定义多行字符串
	s3 := `第一行
第二行
第三行`
	fmt.Println(s1, s2)
	fmt.Println(s3)
	//字符串常用操作
	var str = "this is string"
	//长度
	fmt.Println(len(str))
	//拼接
	var str2 = "你好"
	var str3 = "golang"
	fmt.Println(str2 + " " + str3)
	a := fmt.Sprintf("%s %s", str2, str3)
	fmt.Println(a)
	//分割，将字符串分割成数组
	var str4 = "123-456-789"
	//第一个参数：原字符串，第二个参数，以什么分割
	var arr = strings.Split(str4, "-")
	fmt.Println(arr)
	//合并，将数组合并成一个字符串
	var str5 = strings.Join(arr, ",")
	fmt.Println(str5)

	//遍历字符串
	var str6 = "hello 中国"
	//for第一种语法, 这种遍历方式，遍历出来的是string背后byte数组元素
	fmt.Println([]byte(str6))
	for i := 0; i < len(str6); i++ {
		fmt.Printf("%T %v\n", str6[i], str6[i])
	}
	//for第二种语法
	fmt.Println([]rune(str6))
	for _, value := range str6 {
		fmt.Printf("%T %v\n", value, value)
	}

	//int与string之间的转换
	var num = 10
	//将int类型转成string类型
	str7 := strconv.Itoa(num)
	fmt.Printf("%T %s\n", str7, str7)
	//string转int
	str8 := "11"
	intNum, _ := strconv.Atoi(str8)
	fmt.Printf("%T %d\n", intNum, intNum)
	//float转成string
	var num2 = 20.123123
	fmt.Printf("%T %f\n", num2, num2)
	//第一个参数 要转换的数字
	//第二个参数 格式化的类型
	//第三个参数 保留的小数点
	//第四个参数 float64的位数
	str9 := strconv.FormatFloat(num2, 'f', 2, 64)
	fmt.Printf("%T %s\n", str9, str9)
	//int64转string
	var num3 int64 = 20
	str10 := strconv.FormatInt(num3, 10) //这里是十进制
	fmt.Printf("%T %s\n", str10, str10)
	//bool转换string
	str11 := strconv.FormatBool(true)
	fmt.Printf("%T %s\n", str11, str11)
}
